#include <iostream>
#include <cstring>


//throw int 
int& func(int*a,int n)
{   
    if(n >= 3)
    {
        throw n;
    }
    if(n < 0)
    {
        throw 10;
    }
    return a[n];
}


int main()
{
    int a[3] = {1,2,3};
    try
    {
        func(a,3);
    }
    catch(int)
    {
        std::cout<<"捕获到int异常，数组越界!"<<std::endl;
    }
    catch(double)
    {
        std::cout<<"捕获到double异常"<<std::endl;
    }
    catch(const char*)
    {
        std::cout<<"捕获字符串类型的异常"<<std::endl;
    }
    catch(...)//捕获任意类型的异常
    {
        std::cout<<"捕获其他类型的异常"<<std::endl;
    }
    //异常被捕获之后就不会导致程序终止，程序可以继续执行
    //异常捕获的类型严格匹配，匹配不上，不会捕获
    //异常可以抛出多种，也可以捕获多种异常
    std::cout<<"helloworld"<<std::endl;
    return 0;
}